#ifndef VIEW_H_
#define VIEW_H_

#include <GL/glui.h>
#include <iostream>
#include <string.h>

using namespace std;

/*
<views default="ss" >
	<!-- tem de existir, pelo menos, uma vista das -->
    <!-- seguintes (perspective ou ortho) -->
    <perspective id="ss" near="ff" far="ff" angle="ff">
		<from x="ff" y="ff" z="ff" />
		<to x="ff" y="ff" z="ff" />
    </perspective>
    <ortho id="ss" near="ff" far="ff" left="ff" right="ff" top="ff" bottom="ff" />
</views>
*/
extern float xy_aspect;

class View {

private:

	string tipo;
	float perto;
	float longe;

public:

	View();
	void setTipo(string tipo);
	void setPerto(float perto);
	void setLonge(float longe);
	
	string getTipo() const;
	float getPerto() const;
	float getLonge() const;

	void virtual aplica() = 0;

};


class Perspectiva : public View {

private:

	float angulo;
	float from[4];
	float to[4];

public:

	Perspectiva();

	void setAngulo(float angulo);
	void setFrom(float xF, float yF, float zF);
	void setTo(float xT, float yT, float zT);

	float getAngulo() const;
	float* getFrom();
	float* getTo();

	void aplica();

};

// <ortho id="ss" near="ff" far="ff" left="ff" right="ff" top="ff" bottom="ff" />

class Ortho : public View {

private:

	// string id;
	float esquerda;
	float direita;
	float topo;
	float fundo;

public:

	Ortho();

	void setEsquerda(float esquerda);
	void setDireita(float direita);
	void setTopo(float topo);
	void setFundo(float fundo);

	float getEsquerda() const;
	float getDireita() const;
	float getTopo() const;
	float getFundo() const;
	
	void aplica();
};

#endif

